<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script type="text/javascript">
      /* 
      基本数据类型
        String Number Boolean Null Undefined
      
      引用数据类型
        Object 

        JS中的变量都是保存到栈内存中的
          基本数据类型的值直接在栈内存中存储
          值与值之间是独立存在的,修改一个变量不会影响其它的变量

          对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间。
          而栈内存中的变量的值,是保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象的引用,
          当一个通过一个变量修改属性时,另一个也会受到影响 
      */

      var a = 123;
      var b = a;
      a++;
      console.log('a = ' + a);
      console.log('b = ' + b);

      var obj = new Object();
      obj.name = '孙悟空';

      var obj2 = obj;

      //修改obj的name属性
      obj.name = '猪八戒';

      console.log(obj.name);
      console.log(obj2.name);

      //设置obj2为null
      obj2 = null;

      console.log(obj);
      console.log(obj2);

      var c = 10;
      var d = 10;

      console.log(c == d);

      var obj3 = new Object();
      var obj4 = new Object();

      obj3.name = '沙和尚';
      obj4.name = '沙和尚';

      console.log(obj3);
      console.log(obj4);

      /* 
        当比较两个基本数据类型的值时,就是比较值
        而比较两个引用数据类型时,它是比较对象的内存地址,
            如果两个对象是一模一样的,但是地址不同,它也会返回false
      */
      console.log(obj3 == obj4); //false
    </script>
  </head>

  <body></body>
</html>
